#!/bin/bash

# 启动ChunkServer进程脚本

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 默认端口
DEFAULT_PORT=50051

# 显示使用说明
show_usage() {
    echo -e "${BLUE}=== 启动ChunkServer进程 ===${NC}"
    echo ""
    echo "用法: $0 [端口号]"
    echo ""
    echo "参数:"
    echo "  端口号    指定ChunkServer监听的端口 (默认: $DEFAULT_PORT)"
    echo ""
    echo "示例:"
    echo "  $0              # 使用默认端口 $DEFAULT_PORT"
    echo "  $0 50052        # 使用端口 50052"
    echo "  $0 50053        # 使用端口 50053"
    echo ""
}

# 检查参数
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    show_usage
    exit 0
fi

# 设置端口
PORT=${1:-$DEFAULT_PORT}

echo -e "${BLUE}=== 启动ChunkServer进程 (端口: $PORT) ===${NC}"

# 获取脚本所在目录
SCRIPT_DIR=$(cd $(dirname $0); pwd)
CHUNKSERVER_DIR="$SCRIPT_DIR/persistent_layer/chunkserver"
BUILD_DIR="$CHUNKSERVER_DIR/build"
LOG_DIR="$SCRIPT_DIR/logs"

# 检查chunkserver可执行文件
if [ ! -f "$BUILD_DIR/chunkserver_server" ]; then
    echo -e "${RED}错误: chunkserver_server可执行文件不存在${NC}"
    echo "请先运行 ./build_all.sh 编译项目"
    exit 1
fi

# 创建日志目录
mkdir -p "$LOG_DIR"

# 检查端口是否被占用
if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then
    echo -e "${RED}错误: 端口 $PORT 已被占用${NC}"
    echo "请选择其他端口或停止占用该端口的进程"
    exit 1
fi

# 启动chunkserver
echo -e "${BLUE}启动ChunkServer进程 (端口: $PORT)...${NC}"
cd "$BUILD_DIR"

# 后台启动chunkserver，使用yes命令防止因无输入而退出
nohup yes | ./chunkserver_server --port $PORT > "$LOG_DIR/chunkserver_$PORT.log" 2>&1 &
CHUNKSERVER_PID=$!

# 等待一下让进程启动
sleep 2

# 检查进程是否成功启动
if kill -0 $CHUNKSERVER_PID 2>/dev/null; then
    echo -e "${GREEN}✓ ChunkServer启动成功${NC}"
    echo "进程ID: $CHUNKSERVER_PID"
    echo "监听端口: $PORT"
    echo "日志文件: $LOG_DIR/chunkserver_$PORT.log"
    
    # 保存PID到文件
    echo $CHUNKSERVER_PID > "$LOG_DIR/chunkserver_$PORT.pid"
    echo -e "${BLUE}PID已保存到: $LOG_DIR/chunkserver_$PORT.pid${NC}"
else
    echo -e "${RED}✗ ChunkServer启动失败${NC}"
    echo "请检查日志文件: $LOG_DIR/chunkserver_$PORT.log"
    exit 1
fi

echo ""
echo -e "${YELLOW}查看日志:${NC}"
echo "  tail -f $LOG_DIR/chunkserver_$PORT.log"
echo ""
echo -e "${YELLOW}停止ChunkServer:${NC}"
echo "  ./stop_chunkserver.sh $PORT"
echo ""
echo -e "${GREEN}ChunkServer启动完成！${NC}" 